/*!
 * \file xml_packet.h
 *
 * \brief XML数据包处理
 *
 * All Rights Reserved Copyright (C) 2014 broada,Co.,Ltd.
 *
 * \version 1.0
 * \author songbb
 * \date 2016/08/08
 *
 */

#ifndef __XML_PACKET_H_
#define __XML_PACKET_H_

#include "xml_core.h"

#define APM_XML_PACKET_FRAGMENTED 0    //!< 数据包分片
#define APM_XML_PACKET_UNFRAGMENTED 1  //!< 数据包未分片
#define APM_XML_PACKET_ERROR 2         //!< 数据包出错

#define APM_XML_CHECK_FRAGMENT_SUCCESS 0           //!< 检查数据包是否分片成功
#define APM_XML_CHECK_FRAGMENT_NEED_NEXT_PACKET 1  //!< 需要下一个分片包
#define APM_XML_CHECK_FRAGMENT_ERROR 2             //!< 检查数据包是否分片出错
#define APM_XML_CHECK_FRAGMENT_REPORT_REQ 3             //!< 上报请求包
#define APM_XML_CHECK_FRAGMENT_REPORT_RESP 4             //!< 上报响应包

/*!
 * 初始化XML数据包
 *
 * \param p_st_xml_packet  (XML数据包)
 *
 * \return 0  失败\n
 *         1  成功
 *
 */
int xml_init_packet(L7_xml_packet *p_st_xml_packet);

/*!
 * 预备需要解析的数据
 *
 * \param p_st_sess         (XML的session信息)
 * \param p_st_packet      (协议分析入力数据)
 * \param p_st_xml_packet  (XML数据包)
 *
 * \return 0  失败\n
 *         1  成功
 *
 */
int xml_packet_unfragment(Apm_packet *p_st_packet
                            , L7_xml_packet *p_st_xml_packet
                            , L7session_xml *p_st_sess);

/*!
 * 对纯XML格式预备需要解析的数据
 *
 * \param p_st_sess         (XML的session信息)
 * \param p_st_packet      (协议分析入力数据)
 * \param p_st_xml_packet  (XML数据包)
 *
 * \return 0  失败\n
 *         1  成功
 *
 */
int xml_packet_unfragment2(Apm_packet *p_st_packet
                            , L7_xml_packet *p_st_xml_packet);

#endif
